export const addZRTQ = async () => {
  await __g.marker.clear()
  await __g.customObject.clear()
  await __g.polyline.clear()
  let lines = []
  peopleList.forEach(async (item, index) => {
    lines.push({
      id: item.id, //折线唯一标识id
      coordinates: item.coor, //构成折线的坐标点数组
      coordinateType: 0, //坐标系类型，取值范围：0为Projection类型，1为WGS84类型，2为火星坐标系(GCJ02)，3为百度坐标系(BD09)，默认值：0
      range: [1, 10000000], //可视范围：[近裁距离, 远裁距离]，取值范围: [任意负值, 任意正值]
      thickness: 500, //折线宽度
      intensity: 5,
      color: '#66B2FF',
      shape: 1, //折线类型 0：直线， 1：曲线  注意：设置为曲线非常影响添加效率
      depthTest: false, //是否做深度检测 开启后会被地形高度遮挡
      style: 1, //折线样式 参考样式枚举：PolylineStyle
      tiling: 0, //材质贴图平铺比例
      userData: JSON.stringify(item)
    })
  })
  __g.polyline.add(lines)

  let markerArr = []
  let o = {
    id: 'm1',
    groupId: 'marker3dTest',
    text: '盐田直升机基地', //3D标注显示文字
    textSize: 32, //3D标注显示文字大小
    textColor: '#6BF4F7', //3D标注显示文字颜色
    textOutlineSize: 1, //3D标注显示文字轮廓大小
    textOutlineColor: Color.Black, // 3D标注显示文字轮廓颜色
    textFixed: false, // 3D标注显示文字是否固定文本朝向
    fixedSize: false, // 默认尺寸 非近大远小
    textVisible: true, //3D标注显示文字是否显示文本
    textLocation: [0, 0, 1000], // 文字位置
    textRotation: [0, 90, 0], // 文字旋转
    textScale: [10, 10, 10], // 文字缩放
    pointName: 'Point_B_4', //3D标注展示的特效名称
    pointVisible: true, //3D标注是否显示
    pointScale: 200, //3D标注整体缩放比例
    coordinate: [529195.62125, 2499516.443437, 81.313125], //3D标注的坐标位置 注意：若坐标Z设置高度为0时 autoHeight=true则会显示在物体上方
    coordinateType: 0, //坐标系类型
    range: [1, 100000000], //3D标注的可视距离范围：[min,max]，单位：米
    autoHeight: false //自动判断下方是否有物体，设置正确高度，默认值：false
  }
  markerArr.push(o)
  let o11 = {
    id: 'm11',
    groupId: 'marker3dTest',
    text: '龙港中心城', //3D标注显示文字
    textSize: 32, //3D标注显示文字大小
    textColor: '#6BF4F7', //3D标注显示文字颜色
    textOutlineSize: 1, //3D标注显示文字轮廓大小
    textOutlineColor: Color.Black, // 3D标注显示文字轮廓颜色
    textFixed: false, // 3D标注显示文字是否固定文本朝向
    fixedSize: false, // 默认尺寸 非近大远小
    textVisible: true, //3D标注显示文字是否显示文本
    textLocation: [0, 0, 1000], // 文字位置
    textRotation: [0, 90, 0], // 文字旋转
    textScale: [10, 10, 10], // 文字缩放
    pointName: 'Point_B_4', //3D标注展示的特效名称
    pointVisible: true, //3D标注是否显示
    pointScale: 200, //3D标注整体缩放比例
    coordinate: [524357.01, 2513972.48, 48.169921875], //3D标注的坐标位置 注意：若坐标Z设置高度为0时 autoHeight=true则会显示在物体上方
    coordinateType: 0, //坐标系类型
    range: [1, 100000000], //3D标注的可视距离范围：[min,max]，单位：米
    autoHeight: false //自动判断下方是否有物体，设置正确高度，默认值：false
  }
  markerArr.push(o11)

  let o12 = {
    id: 'm12',
    groupId: 'marker3dTest',
    text: '坂田华为基地', //3D标注显示文字
    textSize: 32, //3D标注显示文字大小
    textColor: '#6BF4F7', //3D标注显示文字颜色
    textOutlineSize: 1, //3D标注显示文字轮廓大小
    textOutlineColor: Color.Black, // 3D标注显示文字轮廓颜色
    textFixed: false, // 3D标注显示文字是否固定文本朝向
    fixedSize: false, // 默认尺寸 非近大远小
    textVisible: true, //3D标注显示文字是否显示文本
    textLocation: [0, 0, 1000], // 文字位置
    textRotation: [0, 90, 0], // 文字旋转
    textScale: [10, 10, 10], // 文字缩放
    pointName: 'Point_B_4', //3D标注展示的特效名称
    pointVisible: true, //3D标注是否显示
    pointScale: 200, //3D标注整体缩放比例
    coordinate: [505608.823125, 2505916.48, 77.958203125], //3D标注的坐标位置 注意：若坐标Z设置高度为0时 autoHeight=true则会显示在物体上方
    coordinateType: 0, //坐标系类型
    range: [1, 100000000], //3D标注的可视距离范围：[min,max]，单位：米
    autoHeight: false //自动判断下方是否有物体，设置正确高度，默认值：false
  }
  markerArr.push(o12)

  let o13 = {
    id: 'm13',
    groupId: 'marker3dTest',
    text: '福田大中华', //3D标注显示文字
    textSize: 32, //3D标注显示文字大小
    textColor: '#6BF4F7', //3D标注显示文字颜色
    textOutlineSize: 1, //3D标注显示文字轮廓大小
    textOutlineColor: Color.Black, // 3D标注显示文字轮廓颜色
    textFixed: false, // 3D标注显示文字是否固定文本朝向
    fixedSize: false, // 默认尺寸 非近大远小
    textVisible: true, //3D标注显示文字是否显示文本
    textLocation: [0, 0, 1000], // 文字位置
    textRotation: [0, 90, 0], // 文字旋转
    textScale: [10, 10, 10], // 文字缩放
    pointName: 'Point_B_4', //3D标注展示的特效名称
    pointVisible: true, //3D标注是否显示
    pointScale: 200, //3D标注整体缩放比例
    coordinate: [505767.53500000003, 2492310.72, 5.429375], //3D标注的坐标位置 注意：若坐标Z设置高度为0时 autoHeight=true则会显示在物体上方
    coordinateType: 0, //坐标系类型
    range: [1, 100000000], //3D标注的可视距离范围：[min,max]，单位：米
    autoHeight: false //自动判断下方是否有物体，设置正确高度，默认值：false
  }
  markerArr.push(o13)

  let o14 = {
    id: 'm14',
    groupId: 'marker3dTest',
    text: '坪山燕子湖', //3D标注显示文字
    textSize: 32, //3D标注显示文字大小
    textColor: '#6BF4F7', //3D标注显示文字颜色
    textOutlineSize: 1, //3D标注显示文字轮廓大小
    textOutlineColor: Color.Black, // 3D标注显示文字轮廓颜色
    textFixed: false, // 3D标注显示文字是否固定文本朝向
    fixedSize: false, // 默认尺寸 非近大远小
    textVisible: true, //3D标注显示文字是否显示文本
    textLocation: [0, 0, 1000], // 文字位置
    textRotation: [0, 90, 0], // 文字旋转
    textScale: [10, 10, 10], // 文字缩放
    pointName: 'Point_B_4', //3D标注展示的特效名称
    pointVisible: true, //3D标注是否显示
    pointScale: 200, //3D标注整体缩放比例
    coordinate: [537156.23, 2512713.6, 39.4815234375], //3D标注的坐标位置 注意：若坐标Z设置高度为0时 autoHeight=true则会显示在物体上方
    coordinateType: 0, //坐标系类型
    range: [1, 100000000], //3D标注的可视距离范围：[min,max]，单位：米
    autoHeight: false //自动判断下方是否有物体，设置正确高度，默认值：false
  }
  markerArr.push(o14)
  __g.marker3d.add(markerArr)
  // 添加飞行器
  addCusObjectDa(peopleList)
  // 飞行器行走
  cusObjectDaMove(peopleList)

  //更新标签内容
  updateMarkerText()
}
/**
 * 大梅沙直升机坐标
 */
export const peopleList = [
  {
    id: '载人通勤',
    coor: [
      [529195.62125, 2499516.443437, 1081.313125],
      [528525.87875, 2496959.5825, 1005.14],
      [525570.11, 2495856.858437, 1000.1825],
      [522817.38, 2495548.777813, 1033.9275],
      [517871.639375, 2496394.89875, 1050.105],
      [515847.718438, 2496094.647188, 1004.185],
      [511969.290625, 2493660.538984, 1004.8475],
      [510440.998125, 2493631.882031, 1004.8925],
      [509219.929375, 2493612.690469, 1008.345],
      [505781.18, 2492332.110547, 1005.595625]
    ],
    jd: 90,
    name: '载人通勤',
    imagePath: window.origin + `/poi/poi_门禁@2x.png`,
    popupURL:
      window.origin +
      '/popup/zhishenji.html?parmas=' +
      encodeURIComponent(
        JSON.stringify({
          id: '载人通勤',
          name: '直升机'
        })
      ),
    assetPath: '/JC_CustomAssets/ObjectLibrary/Exhibition/交通工具/飞机/直升机_1',
    groupId1: 'zsjCusObjectDaGroup',
    groupId2: 'zsjCusObjectDaMarker'
  },
  {
    id: '载人通勤1',
    coor: [
      [529195.62125, 2499516.443437, 1081.313125],
      [527972.121875, 2498065.663125, 1019.555],
      [524052.048125, 2501608.17875, 1146.145],
      [520969.93125, 2504158.725938, 1073.2625],
      [505662.7, 2505959.896875, 1077.7925]
    ],
    jd: 90,
    name: '载人通勤1',
    imagePath: window.origin + `/poi/poi_门禁@2x.png`,
    popupURL:
      window.origin +
      '/popup/zhishenji.html?parmas=' +
      encodeURIComponent(
        JSON.stringify({
          id: '载人通勤1',
          name: '直升机1'
        })
      ),
    assetPath: '/JC_CustomAssets/ObjectLibrary/Exhibition/交通工具/飞机/直升机_1',
    groupId1: 'zsjCusObjectDaGroup',
    groupId2: 'zsjCusObjectDaMarker'
  },
  {
    id: '载人通勤2',
    coor: [
      [529195.62125, 2499516.443437, 1081.313125],
      [529843.970625, 2497248.892813, 1003],
      [530840.025, 2497929.595, 1000.3175],
      [531006.166875, 2499600.193594, 1008.52],
      [532238.6375, 2500461.159141, 1000.2075],
      [532665.38125, 2500051.971172, 1008.44],
      [538537.5325, 2501639.234297, 1004.54],
      [540229.969375, 2502002.720234, 1028.9075],
      [541233.296875, 2505002.375625, 1067.925],
      [537178.73125, 2512723.17375, 1039.685]
    ],
    jd: 90,
    name: '载人通勤2',
    imagePath: window.origin + `/poi/poi_门禁@2x.png`,
    popupURL:
      window.origin +
      '/popup/zhishenji.html?parmas=' +
      encodeURIComponent(
        JSON.stringify({
          id: '载人通勤2',
          name: '直升机2'
        })
      ),
    assetPath: '/JC_CustomAssets/ObjectLibrary/Exhibition/交通工具/飞机/直升机_1',
    groupId1: 'zsjCusObjectDaGroup',
    groupId2: 'zsjCusObjectDaMarker'
  },
  {
    id: '载人通勤3',
    coor: [
      [529195.62125, 2499516.443437, 1081.313125],
      [529195.62125, 2499516.443437, 1081.313125],
      [529696.52875, 2504187.61125, 1376.205],
      [524417.5175, 2513736.9975, 1047.515]
    ],
    jd: 90,
    name: '载人通勤3',
    imagePath: window.origin + `/poi/poi_门禁@2x.png`,
    popupURL:
      window.origin +
      '/popup/zhishenji.html?parmas=' +
      encodeURIComponent(
        JSON.stringify({
          id: '载人通勤3',
          name: '直升机3'
        })
      ),
    assetPath: '/JC_CustomAssets/ObjectLibrary/Exhibition/交通工具/飞机/直升机_1',
    groupId1: 'zsjCusObjectDaGroup',
    groupId2: 'zsjCusObjectDaMarker'
  }
]

/**
 * 点击出现弹框
 * @param e
 */
export const showDialogzsj = async (e) => {
  if (e.GroupID === 'zsjCusObjectDaMarker') {
    clearInterval(window.timer)
    __g.polyline.setThickness(e.Id, -1)
    __g.customObject.focus(e.Id, -1)
    return
  }
}

/**
 * 添加飞行器
 */
export const addCusObjectDa = async (List) => {
  let pList = []
  let pList1 = []
  List.forEach(async (item, index) => {
    if (index % 2 == 0) {
      //只保留两架无人机
      item.coor.forEach(async (it, i) => {
        if (i === 0) {
          let o = {
            id: item.id, //自定义对象唯一id
            pakFilePath: '@path:DTS_Library.pak',
            assetPath: item.assetPath,
            location: item[1], //位置坐标
            coordinateType: 0, // 坐标系类型
            rotation: [0, 0, 0], // 世界坐标系旋转
            range: [0, 10000000], //可见范围
            groupId: item.groupId1, //分组id
            localRotation: [0, item.jd, 0], //模型自身旋转
            scale: [1, 1, 1], //模型缩放
            isEffectRotation: true, //是否开启旋转效果
            smoothMotion: 1, //1: 平滑移动，0: 跳跃移动
            supportAttach: false, //不支持贴画贴合
            visible: true, //模型加载后默认是否显示
            autoHeight: false //是否开启自动高度 开启后自动贴地不再使用坐标Z
          }
          pList.push(o)
          let o1 = {
            id: item.id, //maker唯一标识
            groupId: item.groupId2,
            coordinate: item[1], //坐标位置
            coordinateType: 0, //坐标系类型
            imagePath: item.imagePath, //图片路径
            anchors: [-25, 50],
            imageSize: [50, 50],
            fixedSize: true,
            text: '',
            fontColor: '#ffffff',
            fontSize: 12,
            textRange: [1, 2000000000],
            textBackgroundColor: '#4c5676',
            range: [1, 2000000000], //标签的可见范围 [Min,Max]
            autoHidePopupWindow: true,
            autoHeight: false,
            occlusionCull: false,
            popupURL: item.popupURL, //弹窗HTML链接
            // popupBackgroundColor: [1.0, 1.0, 1.0, 0.5],//弹窗背景颜色
            popupSize: [250, 180], //弹窗大小
            popupOffset: [-130, -100], //弹窗偏移
            showLine: false, //标注点下方是否显示垂直牵引线
            displayMode: 4, //智能显示模式  开发过程中请根据业务需求判断使用四种显示模式
            clusterByImage: true, // 聚合时是否根据图片路径分类，即当多个marker的imagePath路径参数相同时按路径对marker分类聚合
            priority: 0 //避让优先级
          }
          pList1.push(o1)
        }
      })
    }
  })
  __g.customObject.add(pList)
  __g.marker.add(pList1)

  pList.forEach(async (item) => {
    __g.customObject.callBPFunction([
      {
        id: item.id,
        functionName: '状态',
        parameters: [
          { paramType: 0, paramValue: 1 },
          { paramType: 3, paramValue: 2 }
        ]
      }
    ])
    __g.marker.setAttachCustomObject([
      {
        markerId: item.id, //标注id
        objectId: item.id, //自定义对象id
        offset: [0, 0, 0] //偏移量
      }
    ])
  })
}

//更新标签内容
function random(m, n) {
  return Number(m + Math.random() * (n - m)).toFixed(1)
}
export const updateMarkerText = () => {
  if (window.timer) {
    clearInterval(window.timer)
  }
  window.timer = null
  window.timer = setInterval(() => {
    peopleList.forEach((item) => {
      __g.marker.update({
        id: item.id,
        text: `类型：直升机\n高度：${random(300, 600)}m\n速度：${random(30, 40)}m/s`
      })
    })
  }, 2000)
}

/**
 * 飞行器行走
 * @param List 列表
 * @param speedPeople 速度
 */
export const cusObjectDaMove = async (List, speedPeople = 80) => {
  List.forEach((item, index) => {
    //构造移动路径点数组
    let pathPointArr = []
    let sum = 0
    for (let i = 1; i < item.coor.length - 1; i++) {
      //构造数组元素 每1秒移动一次
      let elementPoint = { time: sum, coordinate: item.coor[i] }
      pathPointArr.push(elementPoint)
      sum += computedDistance(item.coor[i], item.coor[i + 1]) / speedPeople
    }
    // 最后一项
    let elementPoint = {
      time: sum + (sum / item.coor.length - 1),
      coordinate: item.coor[item.coor.length - 1]
    }
    pathPointArr.push(elementPoint)

    //车辆按GPS轨迹移动
    __g.customObject.startMove(List[index].id, 0, pathPointArr)
    // __g.customObject.focus(peopleList[0].id)
  })
}

/**
 * 计算投影坐标中空间两点的距离
 */
const computedDistance = (coord1, coord2) => {
  const [x1, y1, z1] = coord1
  const [x2, y2, z2] = coord2

  const deltaX = x2 - x1
  const deltaY = y2 - y1
  const deltaZ = z2 - z1

  const distance = Math.sqrt(deltaX ** 2 + deltaY ** 2 + deltaZ ** 2)
  return distance
}
